package com.hmz.backend.utils;

import java.lang.reflect.Field;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 将对象转成插入字符串
 */
public class BeanToSQL {
    public static String formatForSqlInsert(Object obj) {
        Class<?> clazz = obj.getClass();
        Field[] fields = clazz.getDeclaredFields();

        StringBuilder sb = new StringBuilder();
        sb.append("(");

        Arrays.stream(fields)
                .forEach(field -> {
                    try {
                        field.setAccessible(true); // 设置可访问私有变量
                        Object value = field.get(obj);
                        if (value instanceof String) {
                            sb.append('\'').append(value).append('\''); // 如果是字符串类型，加上单引号
                        } else if (value  instanceof Date) { //如果是日期类型，对其进行格式化
                            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化日期对象
                            sb.append('\'').append(dateFormat.format(value)).append('\'');
                        } else {
                            sb.append(value); // 其他类型直接添加
                        }
                        sb.append(", "); // 添加逗号分隔
                    } catch (IllegalAccessException e) {
                        throw new RuntimeException(e);
                    }
                });

        // 移除最后一个逗号和空格
        if (sb.length() > 1) {
            sb.setLength(sb.length() - 2);
        }

        sb.append(")");

        return sb.toString();
    }

    //将对象列表转成插入sql字符串
    public static String formatForSqlInsertList(List<?> objects){
        String res = "";
        for (int i=0;i<objects.size();i++){
            res+=formatForSqlInsert(objects.get(i));
            if(i!= objects.size()-1) res+=",";
        }
        res+=";";
        return res;
    }
}
